/*
 * File.cpp
 *
 *  Created on: 14/01/2010
 *      Author: San Martín, Matías I.
 */

#include "File.h"

#include <errno.h>
#include <unistd.h>
#include <string.h>
#include <sstream>

using namespace std;

void File::writeAll(int fd,const void* buffer, size_t tamanio)
{
	const char* cbuffer = static_cast<const char*>(buffer);

	for (size_t totalEscrito = 0; totalEscrito < tamanio;)
	{
		ssize_t escrito = ::write(fd, cbuffer + totalEscrito  ,tamanio - totalEscrito);

		if (escrito <= 0)
		{
			stringstream stm;
			stm << "Error al escribir los datos. ";
			stm << (escrito == 0)? "Descirptor cerrado":strerror(errno);
			stm << ".";
			throw new IOExcepcion(stm.str());
		}


		totalEscrito += escrito;
	}

}

void File::readAll(int fd,void* buffer, size_t tamanio)
{
	char* cbuffer = static_cast<char*>(buffer);

	for (size_t totalLeido = 0; totalLeido < tamanio;)
	{
		ssize_t leido = ::read(fd, cbuffer + totalLeido  ,tamanio - totalLeido);

		if (leido <= 0)
		{
			stringstream stm;
			stm << "Error al leer los datos. ";
			stm << (leido == 0)? "Descirptor cerrado":strerror(errno);
			stm << ".";
			throw new IOExcepcion(stm.str());
		}

		totalLeido += leido;
	}
}
